{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Document Embedding with Word2Vec"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\users\\thushan\\documents\\python_virtualenvs\\tensorflow_venv\\lib\\site-packages\\h5py\\__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "  from ._conv import register_converters as _register_converters\n"
     ]
    }
   ],
   "source": [
    "# These are all the modules we'll be using later. Make sure you can import them\n",
    "# before proceeding further.\n",
    "%matplotlib inline\n",
    "from __future__ import print_function\n",
    "import collections\n",
    "import math\n",
    "import numpy as np\n",
    "import os\n",
    "import random\n",
    "import tensorflow as tf\n",
    "import zipfile\n",
    "from matplotlib import pylab\n",
    "from six.moves import range\n",
    "from six.moves.urllib.request import urlretrieve\n",
    "from sklearn.manifold import TSNE\n",
    "from sklearn.cluster import KMeans\n",
    "import nltk # standard preprocessing\n",
    "import operator # sorting items in dictionary by value\n",
    "#nltk.download() #tokenizers/punkt/PY3/english.pickle\n",
    "from math import ceil"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Dataset\n",
    "This code downloads a [dataset](http://mlg.ucd.ie/datasets/bbc.html) consisting of several BBC news articles belonging to various categories (e.g. sport, politics, etc.). Additionally the code makes sure the file has the correct size after downloading it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found and verified bbc-fulltext.zip\n"
     ]
    }
   ],
   "source": [
    "url = 'http://mlg.ucd.ie/files/datasets/'\n",
    "\n",
    "def maybe_download(filename, expected_bytes):\n",
    "  \"\"\"Download a file if not present, and make sure it's the right size.\"\"\"\n",
    "  if not os.path.exists(filename):\n",
    "    filename, _ = urlretrieve(url + filename, filename)\n",
    "  statinfo = os.stat(filename)\n",
    "  if statinfo.st_size == expected_bytes:\n",
    "    print('Found and verified %s' % filename)\n",
    "  else:\n",
    "    print(statinfo.st_size)\n",
    "    raise Exception(\n",
    "      'Failed to verify ' + filename + '. Can you get to it with a browser?')\n",
    "  return filename\n",
    "\n",
    "filename = maybe_download('bbc-fulltext.zip', 2874078)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Read Data with Preprocessing with NLTK\n",
    "Reads data as it is to a string, convert to lower-case and tokenize it using the nltk library. We have two functions `read_data` which reads `files_to_read_for_topic` files from each category and `read_test_data` which set aside 10 documents from the read documents for testing purposes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Processing training data...\n",
      "\tFinished reading data for topic:  business\n",
      "\tFinished reading data for topic:  entertainment\n",
      "\tFinished reading data for topic:  politics\n",
      "\tFinished reading data for topic:  sport\n",
      "\tFinished reading data for topic:  tech\n",
      "\n",
      "Processing testing data...\n",
      "\tFinished reading data for topic:  business\n",
      "\tFinished reading data for topic:  entertainment\n",
      "\tFinished reading data for topic:  politics\n",
      "\tFinished reading data for topic:  sport\n",
      "\tFinished reading data for topic:  tech\n",
      "Example words (start):  ['ad', 'sales', 'boost', 'time', 'warner', 'profit', 'quarterly', 'profits', 'at', 'us']\n",
      "Example words (end):  ['almost', '200,000', 'people', 'are', 'registered', 'players', 'on', 'project', 'entropia', '.']\n"
     ]
    }
   ],
   "source": [
    "def read_data(filename):\n",
    "  \"\"\"\n",
    "  Extract articles up to a given threshold in a zip file as a list of words\n",
    "  and pre-processes it using the nltk python library\n",
    "  \"\"\"\n",
    "  data = []\n",
    "  files_to_read_for_topic = 250\n",
    "  topics = ['business','entertainment','politics','sport','tech']\n",
    "  with zipfile.ZipFile(filename) as z:\n",
    "    parent_dir = z.namelist()[0]\n",
    "    for t in topics:\n",
    "        print('\\tFinished reading data for topic: ',t)\n",
    "        for fi in range(1,files_to_read_for_topic):\n",
    "            with z.open(parent_dir + t + '/'+ format(fi,'03d')+'.txt') as f:\n",
    "                file_string = f.read().decode('latin-1')\n",
    "                file_string = file_string.lower()\n",
    "                file_string = nltk.word_tokenize(file_string)\n",
    "                data.extend(file_string)\n",
    "                \n",
    "    return data\n",
    "\n",
    "def read_test_data(filename):\n",
    "  \"\"\"\n",
    "  Extract articles up to a given threshold in a zip file as a list of words\n",
    "  and pre-processes it using the nltk python library\n",
    "  \"\"\"\n",
    "  test_data = {}\n",
    "  files_to_read_for_topic = 250\n",
    "  topics = ['business','entertainment','politics','sport','tech']\n",
    "  with zipfile.ZipFile(filename) as z:\n",
    "    parent_dir = z.namelist()[0]\n",
    "    for t in topics:\n",
    "        print('\\tFinished reading data for topic: ',t)\n",
    "            \n",
    "        for fi in np.random.randint(1,files_to_read_for_topic,(10)).tolist():\n",
    "            with z.open(parent_dir + t + '/'+ format(fi,'03d')+'.txt') as f:\n",
    "                file_string = f.read().decode('latin-1')\n",
    "                file_string = file_string.lower()\n",
    "                file_string = nltk.word_tokenize(file_string)\n",
    "                test_data[t+'-'+str(fi)] = file_string\n",
    "                \n",
    "    return test_data\n",
    "\n",
    "print('Processing training data...')\n",
    "words = read_data(filename)\n",
    "print('\\nProcessing testing data...')\n",
    "test_words = read_test_data(filename)\n",
    "\n",
    "print('Example words (start): ',words[:10])\n",
    "print('Example words (end): ',words[-10:])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Building the Dictionaries\n",
    "Builds the following. To understand each of these elements, let us also assume the text \"I like to go to school\"\n",
    "\n",
    "* `dictionary`: maps a string word to an ID (e.g. {I:0, like:1, to:2, go:3, school:4})\n",
    "* `reverse_dictionary`: maps an ID to a string word (e.g. {0:I, 1:like, 2:to, 3:go, 4:school}\n",
    "* `count`: List of list of (word, frequency) elements (e.g. [(I,1),(like,1),(to,2),(go,1),(school,1)]\n",
    "* `data` : Contain the string of text we read, where string words are replaced with word IDs (e.g. [0, 1, 2, 3, 2, 4])\n",
    "\n",
    "It also introduces an additional special token `UNK` to denote rare words to are too rare to make use of."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Building Test Dataset for  tech-34  topic\n",
      "Building Test Dataset for  sport-166  topic\n",
      "Building Test Dataset for  sport-87  topic\n",
      "Building Test Dataset for  entertainment-119  topic\n",
      "Building Test Dataset for  business-161  topic\n",
      "Building Test Dataset for  sport-129  topic\n",
      "Building Test Dataset for  tech-145  topic\n",
      "Building Test Dataset for  business-135  topic\n",
      "Building Test Dataset for  sport-206  topic\n",
      "Building Test Dataset for  sport-45  topic\n",
      "Building Test Dataset for  tech-216  topic\n",
      "Building Test Dataset for  entertainment-216  topic\n",
      "Building Test Dataset for  politics-184  topic\n",
      "Building Test Dataset for  sport-184  topic\n",
      "Building Test Dataset for  business-171  topic\n",
      "Building Test Dataset for  sport-32  topic\n",
      "Building Test Dataset for  politics-247  topic\n",
      "Building Test Dataset for  business-240  topic\n",
      "Building Test Dataset for  entertainment-98  topic\n",
      "Building Test Dataset for  politics-171  topic\n",
      "Building Test Dataset for  tech-157  topic\n",
      "Building Test Dataset for  politics-8  topic\n",
      "Building Test Dataset for  politics-78  topic\n",
      "Building Test Dataset for  politics-16  topic\n",
      "Building Test Dataset for  business-44  topic\n",
      "Building Test Dataset for  business-215  topic\n",
      "Building Test Dataset for  tech-79  topic\n",
      "Building Test Dataset for  tech-178  topic\n",
      "Building Test Dataset for  entertainment-163  topic\n",
      "Building Test Dataset for  entertainment-196  topic\n",
      "Building Test Dataset for  politics-236  topic\n",
      "Building Test Dataset for  sport-20  topic\n",
      "Building Test Dataset for  business-165  topic\n",
      "Building Test Dataset for  sport-26  topic\n",
      "Building Test Dataset for  tech-238  topic\n",
      "Building Test Dataset for  sport-231  topic\n",
      "Building Test Dataset for  tech-42  topic\n",
      "Building Test Dataset for  politics-197  topic\n",
      "Building Test Dataset for  entertainment-1  topic\n",
      "Building Test Dataset for  politics-98  topic\n",
      "Building Test Dataset for  business-141  topic\n",
      "Building Test Dataset for  entertainment-74  topic\n",
      "Building Test Dataset for  entertainment-244  topic\n",
      "Building Test Dataset for  tech-212  topic\n",
      "Building Test Dataset for  entertainment-154  topic\n",
      "Building Test Dataset for  business-144  topic\n",
      "Building Test Dataset for  business-107  topic\n",
      "Most common words (+UNK) [['UNK', 912], ('the', 28312), ('.', 21345), (',', 18517), ('to', 13509)]\n",
      "Sample data [4469, 170, 704, 79, 2509, 969, 4509, 541, 25, 54]\n",
      "test keys:  dict_keys(['tech-34', 'sport-166', 'sport-87', 'entertainment-119', 'business-161', 'sport-129', 'tech-145', 'business-135', 'sport-206', 'tech-216', 'entertainment-216', 'politics-184', 'sport-184', 'sport-45', 'sport-32', 'politics-247', 'business-240', 'entertainment-98', 'politics-171', 'politics-8', 'business-165', 'politics-16', 'business-44', 'business-215', 'tech-79', 'tech-178', 'entertainment-163', 'entertainment-196', 'politics-236', 'entertainment-1', 'sport-20', 'tech-157', 'sport-26', 'politics-78', 'tech-238', 'sport-231', 'tech-42', 'politics-197', 'business-171', 'politics-98', 'business-141', 'entertainment-74', 'entertainment-244', 'tech-212', 'entertainment-154', 'business-144', 'business-107'])\n"
     ]
    }
   ],
   "source": [
    "vocabulary_size = 25000\n",
    "\n",
    "def build_dataset(words):\n",
    "  # Allocate a special token for rare words\n",
    "  count = [['UNK', -1]]\n",
    "\n",
    "  # Gets only the vocabulary_size most common words as the vocabulary\n",
    "  # All the other words will be replaced with UNK token\n",
    "  count.extend(collections.Counter(words).most_common(vocabulary_size - 1))\n",
    "\n",
    "\n",
    "  # Create an ID for each word by giving the current length of the dictionary\n",
    "  # And adding that item to the dictionary\n",
    "  dictionary = dict()\n",
    "  for word, _ in count:\n",
    "    dictionary[word] = len(dictionary)\n",
    "    \n",
    "  data = list()\n",
    "  unk_count = 0\n",
    "    \n",
    "  # Traverse through all the text we have and produce a list\n",
    "  # where each element corresponds to the ID of the word found at that index\n",
    "  for word in words:\n",
    "    # If word is in the dictionary use the word ID,\n",
    "    # else use the ID of the special token \"UNK\"\n",
    "    if word in dictionary:\n",
    "      index = dictionary[word]\n",
    "    else:\n",
    "      index = 0  # dictionary['UNK']\n",
    "      unk_count = unk_count + 1\n",
    "    data.append(index)\n",
    "  \n",
    "  # update the count variable with the number of UNK occurences\n",
    "  count[0][1] = unk_count\n",
    "    \n",
    "  reverse_dictionary = dict(zip(dictionary.values(), dictionary.keys())) \n",
    "  # Make sure the dictionary is of size of the vocabulary\n",
    "  assert len(dictionary) == vocabulary_size\n",
    "\n",
    "  return data, count, dictionary, reverse_dictionary\n",
    "\n",
    "def build_dataset_with_existing_dictionary(words, dictionary):\n",
    "    '''\n",
    "    Here we use this function to convert word strings to IDs\n",
    "    with a given dictionary\n",
    "    '''\n",
    "    data = list()\n",
    "    for word in words:\n",
    "        if word in dictionary:\n",
    "          index = dictionary[word]\n",
    "        else:\n",
    "          index = 0  # dictionary['UNK']\n",
    "        data.append(index)\n",
    "    return data\n",
    "\n",
    "# Processining training data\n",
    "data, count, dictionary, reverse_dictionary = build_dataset(words)\n",
    "\n",
    "# Processing test data\n",
    "test_data = {}\n",
    "for k,v in test_words.items():\n",
    "    print('Building Test Dataset for ',k,' topic')\n",
    "    test_data[k] = build_dataset_with_existing_dictionary(test_words[k],dictionary)\n",
    "    \n",
    "print('Most common words (+UNK)', count[:5])\n",
    "print('Sample data', data[:10])\n",
    "print('test keys: ',test_data.keys())\n",
    "del words  # Hint to reduce memory.\n",
    "del test_words"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Generating Batches of Data for Skip-Gram\n",
    "Generates a batch or target words (`batch`) and a batch of corresponding context words (`labels`). It reads `2*window_size+1` words at a time (called a `span`) and create `2*window_size` datapoints in a single span. The function continue in this manner until `batch_size` datapoints are created. Everytime we reach the end of the word sequence, we start from beginning. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "with window_size = 1:\n",
      "    batch: [['sales', 'sales'], ['sales', 'sales'], ['boost', 'boost'], ['boost', 'boost'], ['time', 'time'], ['time', 'time'], ['warner', 'warner'], ['warner', 'warner']]\n",
      "    labels: ['ad', 'boost', 'sales', 'time', 'boost', 'warner', 'time', 'profit']\n",
      "\n",
      "with window_size = 2:\n",
      "    batch: [['boost', 'boost', 'boost', 'boost'], ['boost', 'boost', 'boost', 'boost'], ['boost', 'boost', 'boost', 'boost'], ['boost', 'boost', 'boost', 'boost'], ['time', 'time', 'time', 'time'], ['time', 'time', 'time', 'time'], ['time', 'time', 'time', 'time'], ['time', 'time', 'time', 'time']]\n",
      "    labels: ['ad', 'sales', 'time', 'warner', 'sales', 'boost', 'warner', 'profit']\n"
     ]
    }
   ],
   "source": [
    "data_index = 0\n",
    "\n",
    "def generate_batch(data, batch_size, window_size):\n",
    "    # data_index is updated by 1 everytime we read a data point\n",
    "    global data_index\n",
    "    \n",
    "    # span defines the total window size, where\n",
    "    # data we consider at an instance looks as follows. \n",
    "    # [ skip_window target skip_window ]\n",
    "    span = 2 * window_size + 1\n",
    "    \n",
    "    # two numpy arras to hold target words (batch)\n",
    "    # and context words (labels)\n",
    "    batch = np.ndarray(shape=(batch_size,span-1), dtype=np.int32)\n",
    "    labels = np.ndarray(shape=(batch_size, 1), dtype=np.int32)\n",
    "    \n",
    "    # The buffer holds the data contained within the span\n",
    "    buffer = collections.deque(maxlen=span)\n",
    "\n",
    "    # Fill the buffer and update the data_index\n",
    "    for _ in range(span):\n",
    "        buffer.append(data[data_index])\n",
    "        data_index = (data_index + 1) % len(data)\n",
    "\n",
    "    # This is the number of context words we sample for a single target word\n",
    "    num_samples = 2*window_size \n",
    "\n",
    "    # We break the batch reading into two for loops\n",
    "    # The inner for loop fills in the batch and labels with \n",
    "    # num_samples data points using data contained withing the span\n",
    "    # The outper for loop repeat this for batch_size//num_samples times\n",
    "    # to produce a full batch\n",
    "    for i in range(batch_size // num_samples):\n",
    "      k=0\n",
    "      # avoid the target word itself as a prediction\n",
    "      # fill in batch and label numpy arrays\n",
    "      for j in list(range(window_size))+list(range(window_size+1,2*window_size+1)):\n",
    "        batch[i * num_samples + k] = buffer[window_size]\n",
    "        labels[i * num_samples + k, 0] = buffer[j]\n",
    "        k += 1 \n",
    "    \n",
    "      # Everytime we read num_samples data points,\n",
    "      # we have created the maximum number of datapoints possible\n",
    "      # withing a single span, so we need to move the span by 1\n",
    "      # to create a fresh new span\n",
    "      buffer.append(data[data_index])\n",
    "      data_index = (data_index + 1) % len(data)\n",
    "\n",
    "    assert batch.shape[0]==batch_size and batch.shape[1]== span-1\n",
    "    return batch, labels\n",
    "\n",
    "for window_size in [1,2]:\n",
    "    data_index = 0\n",
    "    batch, labels = generate_batch(data, batch_size=8, window_size=window_size)\n",
    "    print('\\nwith window_size = %d:' % (window_size))\n",
    "    print('    batch:', [[reverse_dictionary[bii] for bii in bi] for bi in batch])\n",
    "    print('    labels:', [reverse_dictionary[li] for li in labels.reshape(8)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "with window_size = 2:\n",
      "    labels: ['uk', 'gets', 'official', 'virus', 'alert', 'site', 'a', 'rapid']\n"
     ]
    }
   ],
   "source": [
    "test_data_index = 0\n",
    "\n",
    "def generate_test_batch(data, batch_size):\n",
    "    '''\n",
    "    Generate a batch of data from the test data\n",
    "    This is used to compute the document embedding\n",
    "    by taking the average of all the words in a document\n",
    "    '''\n",
    "    global test_data_index\n",
    "\n",
    "    batch = np.ndarray(shape=(batch_size,), dtype=np.int32)\n",
    "    # Get words starting from index 0 to span\n",
    "    for bi in range(batch_size):\n",
    "        batch[bi] = data[test_data_index]\n",
    "        test_data_index = (test_data_index + 1) % len(data)\n",
    "\n",
    "    return batch\n",
    "\n",
    "test_data_index = 0\n",
    "test_batch = generate_test_batch(test_data[list(test_data.keys())[0]], batch_size=8)\n",
    "print('\\nwith window_size = %d:' % (window_size))\n",
    "print('    labels:', [reverse_dictionary[li] for li in test_batch.reshape(8)])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# CBOW Algorithm"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Defining Hyperparameters\n",
    "\n",
    "Here we define several hyperparameters including `batch_size` (amount of samples in a single batch) `embedding_size` (size of embedding vectors) `window_size` (context window size)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "batch_size = 128 # Data points in a single batch\n",
    "embedding_size = 128 # Dimension of the embedding vector.\n",
    "window_size = 4 # How many words to consider left and right.\n",
    "\n",
    "# We pick a random validation set to sample nearest neighbors\n",
    "valid_size = 16 # Random set of words to evaluate similarity on.\n",
    "# We sample valid datapoints randomly from a large window without always being deterministic\n",
    "valid_window = 50\n",
    "\n",
    "# When selecting valid examples, we select some of the most frequent words as well as\n",
    "# some moderately rare words as well\n",
    "valid_examples = np.array(random.sample(range(valid_window), valid_size))\n",
    "valid_examples = np.append(valid_examples,random.sample(range(1000, 1000+valid_window), valid_size),axis=0)\n",
    "\n",
    "num_sampled = 32 # Number of negative examples to sample."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Defining Inputs and Outputs\n",
    "\n",
    "Here we define placeholders for feeding in training inputs and outputs (each of size `batch_size`) and a constant tensor to contain validation examples."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "tf.reset_default_graph()\n",
    "\n",
    "# Training input data (target word IDs).\n",
    "train_dataset = tf.placeholder(tf.int32, shape=[batch_size,2*window_size])\n",
    "\n",
    "# Training input label data (context word IDs)\n",
    "train_labels = tf.placeholder(tf.int32, shape=[batch_size, 1])\n",
    "\n",
    "# Validation input data, we don't need a placeholder\n",
    "# as we have already defined the IDs of the words selected\n",
    "# as validation data used to evaluate the word vectors\n",
    "valid_dataset = tf.constant(valid_examples, dtype=tf.int32)\n",
    "\n",
    "# Test data. This is used to compute the document embeddings by averaging\n",
    "# word embeddings of a given document\n",
    "test_labels = tf.placeholder(tf.int32, shape=[batch_size],name='test_dataset')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Defining Model Parameters and Other Variables\n",
    "We now define several TensorFlow variables such as an embedding layer (`embeddings`) and neural network parameters (`softmax_weights` and `softmax_biases`)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Variables.\n",
    "# embedding, vector for each word in the vocabulary\n",
    "embeddings = tf.Variable(tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0,dtype=tf.float32))\n",
    "softmax_weights = tf.Variable(tf.truncated_normal([vocabulary_size, embedding_size],\n",
    "                     stddev=1.0 / math.sqrt(embedding_size),dtype=tf.float32))\n",
    "softmax_biases = tf.Variable(tf.zeros([vocabulary_size],dtype=tf.float32))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Defining the Model Computations\n",
    "\n",
    "We first defing a lookup function to fetch the corresponding embedding vectors for a set of given inputs. With that, we define negative sampling loss function `tf.nn.sampled_softmax_loss` which takes in the embedding vectors and previously defined neural network parameters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Defining 8 embedding lookups representing each word in the context\n",
      "Stacked embedding size: [128, 128, 8]\n",
      "Reduced mean embedding size: [128, 128]\n"
     ]
    }
   ],
   "source": [
    "# Used to compute document embeddings by averaging all the word vectors of a \n",
    "# given batch of test data\n",
    "mean_batch_embedding = tf.reduce_mean(tf.nn.embedding_lookup(embeddings,test_labels),axis=0)\n",
    "    \n",
    "# Model.\n",
    "# Look up embeddings for all the context words of the inputs.\n",
    "# Then compute a tensor by staking embeddings of all context words\n",
    "stacked_embedings = None\n",
    "print('Defining %d embedding lookups representing each word in the context'%(2*window_size))\n",
    "for i in range(2*window_size):\n",
    "    embedding_i = tf.nn.embedding_lookup(embeddings, train_dataset[:,i])        \n",
    "    x_size,y_size = embedding_i.get_shape().as_list()\n",
    "    if stacked_embedings is None:\n",
    "        stacked_embedings = tf.reshape(embedding_i,[x_size,y_size,1])\n",
    "    else:\n",
    "        stacked_embedings = tf.concat(axis=2,values=[stacked_embedings,tf.reshape(embedding_i,[x_size,y_size,1])])\n",
    "\n",
    "# Make sure the staked embeddings have 2*window_size columns\n",
    "assert stacked_embedings.get_shape().as_list()[2]==2*window_size\n",
    "print(\"Stacked embedding size: %s\"%stacked_embedings.get_shape().as_list())\n",
    "\n",
    "# Compute mean embeddings by taking the mean of the tensor containing the stack of embeddings\n",
    "mean_embeddings =  tf.reduce_mean(stacked_embedings,2,keepdims=False)\n",
    "print(\"Reduced mean embedding size: %s\"%mean_embeddings.get_shape().as_list())\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Computing Loss\n",
    "Loss computation using sampled softmax"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From c:\\users\\thushan\\documents\\python_virtualenvs\\tensorflow_venv\\lib\\site-packages\\tensorflow\\python\\ops\\nn_impl.py:1344: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "\n",
      "Future major versions of TensorFlow will allow gradients to flow\n",
      "into the labels input on backprop by default.\n",
      "\n",
      "See @{tf.nn.softmax_cross_entropy_with_logits_v2}.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Compute the softmax loss, using a sample of the negative labels each time.\n",
    "# inputs are embeddings of the train words\n",
    "# with this loss we optimize weights, biases, embeddings\n",
    "\n",
    "# If you see the warning\n",
    "# WARNING:tensorflow:From c:\\...\\lib\\site-packages\\tensorflow\\python\\ops\\nn_impl.py:1346: \n",
    "# softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and \n",
    "# will be removed in a future version.\n",
    "# You can ignore this. This caused by the internally used softmax_cross_entropy_with_logits function\n",
    "loss = tf.reduce_mean(\n",
    "    tf.nn.sampled_softmax_loss(weights=softmax_weights, biases=softmax_biases, inputs=mean_embeddings,\n",
    "                           labels=train_labels, num_sampled=num_sampled, num_classes=vocabulary_size))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Calculating Word Similarities \n",
    "We calculate the similarity between two given words in terms of the cosine distance. To do this efficiently we use matrix operations to do so, as shown below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Compute the similarity between minibatch examples and all embeddings.\n",
    "# We use the cosine distance:\n",
    "norm = tf.sqrt(tf.reduce_sum(tf.square(embeddings), 1, keepdims=True))\n",
    "normalized_embeddings = embeddings / norm\n",
    "valid_embeddings = tf.nn.embedding_lookup(normalized_embeddings, valid_dataset)\n",
    "similarity = tf.matmul(valid_embeddings, tf.transpose(normalized_embeddings))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Model Parameter Optimizer\n",
    "\n",
    "We then define a constant learning rate and an optimizer which uses the Adagrad method. Feel free to experiment with other optimizers listed [here](https://www.tensorflow.org/api_guides/python/train)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Optimizer. Adagrad optimizers has learning rates assigned to individual parameters\n",
    "optimizer = tf.train.AdagradOptimizer(1.0).minimize(loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Running the CBOW Algorithm on Document Data\n",
    "\n",
    "Here we run the CBOW algorithm we defined above. Specifically, we first initialize variables, and then train the algorithm for many steps (`num_steps`). And every few steps we evaluate the algorithm on a fixed validation set and print out the words that appear to be closest for a given set of words."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Initialized\n",
      "Average loss at step 2000: 3.914388\n",
      "Average loss at step 4000: 3.562556\n",
      "Average loss at step 6000: 3.545086\n",
      "Average loss at step 8000: 3.549088\n",
      "Average loss at step 10000: 3.481902\n",
      "Nearest to .: ,, and, mp3s, friendlies, -, that, documentary, low,\n",
      "Nearest to i: we, is, appreciate, outsiders, icann, modelling, onslaught, chennai,\n",
      "Nearest to which: impromptu, israeli, skills, portuguese, ghanaian, lifetime, innocence, paisley,\n",
      "Nearest to were: are, cryptography, heaped, 836m, 50mg, pervasively, 28,000, past,\n",
      "Nearest to we: people, they, enormity, i, ranked, is, jacob, are,\n",
      "Nearest to they: we, softer, to, not, revisions, 27.24, 'template, be,\n",
      "Nearest to would: will, to, should, alleges, sleepless, jolie, also, could,\n",
      "Nearest to that: not, about, it, ., change, get, politicians, gartner,\n",
      "Nearest to had: has, have, was, streets, bulgaria, directory, nestle, binding,\n",
      "Nearest to said: added, restriction-free, forgiven, breathing, allardyce, intends, vans, he,\n",
      "Nearest to this: 2005/06, build, connectotel, it, short, greenback, last, diet,\n",
      "Nearest to he: it, inaccurate, mr, she, '', 102, was, has,\n",
      "Nearest to not: that, complained, phenomenon, sourced, they, 10.4, cliques, 'template,\n",
      "Nearest to it: he, there, everyday, that, ``, 6gb, this, did,\n",
      "Nearest to ,: ., 's, the, sleeves, and, singer/guitarist, legislative, observed,\n",
      "Nearest to from: for, hermann, in, and, by, jeep, flights, asher,\n",
      "Average loss at step 12000: 3.430094\n",
      "Average loss at step 14000: 3.389438\n",
      "Average loss at step 16000: 3.424164\n",
      "Average loss at step 18000: 3.514444\n",
      "Average loss at step 20000: 3.403364\n",
      "Nearest to .: ,, that, joint, :, midnight, military, mpx, jolanda,\n",
      "Nearest to i: we, do, but, what, they, it, appreciate, platinum,\n",
      "Nearest to which: and, by, with, casinos, impromptu, new, killed, from,\n",
      "Nearest to were: are, was, had, have, notebooks, 'work, linda, rotated,\n",
      "Nearest to we: i, they, you, finalists, 1965-2003, fluctuations, situation, pressure,\n",
      "Nearest to they: we, you, not, people, their, if, i, 180,000,\n",
      "Nearest to would: will, could, to, should, can, did, may, graphic,\n",
      "Nearest to that: newly-founded, also, ., it, not, but, this, greet,\n",
      "Nearest to had: has, have, was, observe, co-produced, directed, would, backdoor,\n",
      "Nearest to said: added, '', mr, he, told, ``, kitted, clashes,\n",
      "Nearest to this: it, patrons, last, also, the, dealer, wings, that,\n",
      "Nearest to he: mr, she, '', it, said, ``, but, :,\n",
      "Nearest to not: it, n't, but, they, if, argentine, that, hi-fi,\n",
      "Nearest to it: not, this, he, but, mcguire, involve, that, she,\n",
      "Nearest to ,: ., '', 'wrong', bass, uproar, amnesty, willing, mr,\n",
      "Nearest to from: on, with, by, in, unaccountably, which, inequalities, toxic,\n",
      "Average loss at step 22000: 3.360072\n",
      "Average loss at step 24000: 3.224653\n",
      "Average loss at step 26000: 3.247245\n",
      "Average loss at step 28000: 3.251723\n",
      "Average loss at step 30000: 3.292167\n",
      "Nearest to .: and, ,, 's, :, that, but, menzies, -,\n",
      "Nearest to i: we, do, n't, it, you, :, what, he,\n",
      "Nearest to which: lifetime, by, -, with, underwater, dramatisations, lindblom, israeli,\n",
      "Nearest to were: are, was, cryptography, by, had, have, 28,000, virus',\n",
      "Nearest to we: i, you, they, it, do, n't, people, fill,\n",
      "Nearest to they: you, we, their, to, n't, phd, 'template, takenaka,\n",
      "Nearest to would: will, could, should, to, can, did, may, was,\n",
      "Nearest to that: but, football, not, ., to, it, there, about,\n",
      "Nearest to had: has, have, skates, was, bulgaria, were, backdoor, directed,\n",
      "Nearest to said: added, told, but, says, mr, bbc, :, horns,\n",
      "Nearest to this: last, it, 'super, particular, outrageous, fonetography, proper, â£23.7m,\n",
      "Nearest to he: mr, she, it, but, rehearsal, there, ms, dr,\n",
      "Nearest to not: n't, complained, that, it, insufficient, enveloping, but, ya,\n",
      "Nearest to it: there, he, i, but, this, we, kennedy, not,\n",
      "Nearest to ,: ., singer/guitarist, the, and, wasserstein, 28,000, 's, -,\n",
      "Nearest to from: and, hermann, of, with, about, or, in, ecologists,\n",
      "Average loss at step 32000: 3.243262\n",
      "Average loss at step 34000: 3.166880\n",
      "Average loss at step 36000: 3.179789\n",
      "Average loss at step 38000: 3.297208\n",
      "Average loss at step 40000: 3.270089\n",
      "Nearest to .: ,, but, :, christie, 7,613, that, sited, prophesy,\n",
      "Nearest to i: we, spot-kick, do, flickr, it, they, n't, you,\n",
      "Nearest to which: that, who, also, shahid, and, -, conlon, how,\n",
      "Nearest to were: are, was, they, have, had, poured, cryptography, congregation,\n",
      "Nearest to we: they, i, you, there, proposes, 1965-2003, n't, hotly-tipped,\n",
      "Nearest to they: we, you, were, dre, n't, i, if, hi-fi,\n",
      "Nearest to would: will, could, should, can, did, may, kevin, to,\n",
      "Nearest to that: which, what, if, not, uploading, ., politicians, because,\n",
      "Nearest to had: has, have, been, was, were, 1971., 99, coordinate,\n",
      "Nearest to said: added, '', says, told, mr, but, however, kessler,\n",
      "Nearest to this: it, last, risque, 'super, negotiated, cannibals, that, 1100,\n",
      "Nearest to he: mr, she, '', ms, ``, it, said, appreciate,\n",
      "Nearest to not: n't, if, it, that, what, ported, how, complained,\n",
      "Nearest to it: this, not, there, two-disc, ticked, i, he, lose,\n",
      "Nearest to ,: ., and, '', 7,613, .uk, 'eyes, educations, tv-quality,\n",
      "Nearest to from: in, woodford, recounted, fleet, over, by, while, 86.9kg,\n",
      "Average loss at step 42000: 3.224403\n",
      "Average loss at step 44000: 3.156801\n",
      "Average loss at step 46000: 3.164898\n",
      "Average loss at step 48000: 3.121476\n",
      "Average loss at step 50000: 3.189163\n",
      "Nearest to .: ,, and, the, of, but, satisfaction, rapped, carsoni,\n",
      "Nearest to i: we, you, do, get, n't, they, he, 'm,\n",
      "Nearest to which: that, by, malnourishment, shahid, silverware, settling, -, conlon,\n",
      "Nearest to were: are, was, had, have, cryptography, by, 28,000, taste,\n",
      "Nearest to we: i, you, they, he, anything, '', drill, there,\n",
      "Nearest to they: not, we, you, their, i, to, n't, ,,\n",
      "Nearest to would: could, will, should, can, may, that, did, was,\n",
      "Nearest to that: not, but, what, would, to, it, about, have,\n",
      "Nearest to had: has, have, been, were, subjected, recently, was, coordinate,\n",
      "Nearest to said: added, says, but, told, intends, 's, stormed, committee,\n",
      "Nearest to this: agile, all-in-one, pyra, cannibals, our, fonetography, last, it,\n",
      "Nearest to he: she, mr, it, browne, i, lishman, we, mac,\n",
      "Nearest to not: that, n't, they, if, it, 5th, complained, you,\n",
      "Nearest to it: he, there, the, not, that, she, kosenkow, granted,\n",
      "Nearest to ,: ., -, and, the, by, of, in, for,\n",
      "Nearest to from: and, hermann, â£1,950, over, fracturing, by, cleaning, where,\n",
      "Average loss at step 52000: 3.172147\n",
      "Average loss at step 54000: 3.145303\n",
      "Average loss at step 56000: 3.039597\n",
      "Average loss at step 58000: 3.138336\n",
      "Average loss at step 60000: 3.196014\n",
      "Nearest to .: ,, 7,613, spicy, bloopers, elimination, that, desai, cory,\n",
      "Nearest to i: we, they, daly, you, it, spot-kick, barred, do,\n",
      "Nearest to which: who, that, by, weird, sports-leisure, rogge, conlon, alliance,\n",
      "Nearest to were: are, was, had, cryptography, accompaniment, desai, originally, many,\n",
      "Nearest to we: they, i, you, all, hodgson, fluctuations, 1100, daly,\n",
      "Nearest to they: we, you, i, untapped, their, hi-fi, escalated, if,\n",
      "Nearest to would: will, should, could, can, may, did, paragons, remittances,\n",
      "Nearest to that: it, if, patient, windows-based, ., inventors, observe, which,\n",
      "Nearest to had: has, have, been, subjected, were, was, observe, route,\n",
      "Nearest to said: added, says, told, '', clashes, however, kessler, 1917,\n",
      "Nearest to this: last, 28.1, next, blindingly, risque, gift, beacon, masse,\n",
      "Nearest to he: mr, she, '', it, ``, meadows, 1917, box-office,\n",
      "Nearest to not: n't, if, diversified, afraid, gratitude, gasoline, that, shame,\n",
      "Nearest to it: that, he, adequate, i, ticked, temptation, ismail, definitive,\n",
      "Nearest to ,: ., and, 7,613, one/channel, ranking, mikko, blom, uproar,\n",
      "Nearest to from: by, over, fuqua, towergroup, particularly, faded, wide, nitrogen,\n",
      "Average loss at step 62000: 3.140310\n",
      "Average loss at step 64000: 3.128064\n",
      "Average loss at step 66000: 3.064954\n",
      "Average loss at step 68000: 3.086546\n",
      "Average loss at step 70000: 3.096430\n",
      "Nearest to .: ,, the, and, that, to, cookers, malfunction, of,\n",
      "Nearest to i: we, you, he, if, daly, 'm, so, it,\n",
      "Nearest to which: weird, elwa, 6x4in, organised, malnourishment, punt, dramatisations, emmerson,\n",
      "Nearest to were: are, was, had, have, bromby, originally, by, they,\n",
      "Nearest to we: i, you, they, he, if, '', n't, it,\n",
      "Nearest to they: we, you, that, not, if, their, but, 43.9bn,\n",
      "Nearest to would: will, could, should, did, can, may, to, had,\n",
      "Nearest to that: but, not, ``, it, :, '', ., to,\n",
      "Nearest to had: has, have, been, were, was, catering, would, backdoor,\n",
      "Nearest to said: added, says, told, however, '', he, but, ``,\n",
      "Nearest to this: last, it, cormac, risque, unite, all-in-one, see, do,\n",
      "Nearest to he: she, mr, it, his, i, but, '', said,\n",
      "Nearest to not: n't, that, but, if, they, it, you, pleased,\n",
      "Nearest to it: he, there, that, but, risqu, i, not, traced,\n",
      "Nearest to ,: ., ``, and, -, was, 's, that, in,\n",
      "Nearest to from: wyn, tier, lyrics, hermann, over, after, 10.7m, militias,\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Average loss at step 72000: 3.139551\n",
      "Average loss at step 74000: 3.096346\n",
      "Average loss at step 76000: 3.018249\n",
      "Average loss at step 78000: 2.997490\n",
      "Average loss at step 80000: 3.172127\n",
      "Nearest to .: ,, and, that, but, 7,613, the, -, of,\n",
      "Nearest to i: we, daly, you, they, â£53m, 2.9mbps, flickr, weblogs,\n",
      "Nearest to which: who, that, and, by, confrontation, conlon, to, also,\n",
      "Nearest to were: are, was, have, had, poured, bethan, almost, they,\n",
      "Nearest to we: you, i, they, llanelli, daly, 'an, rid, n't,\n",
      "Nearest to they: we, you, not, their, people, if, to, phenomenon,\n",
      "Nearest to would: will, could, can, should, did, remittances, might, to,\n",
      "Nearest to that: but, it, ., by, the, which, what, if,\n",
      "Nearest to had: has, have, been, were, was, could, skip, backdoor,\n",
      "Nearest to said: added, says, '', told, if, but, affordable, stone,\n",
      "Nearest to this: the, a, last, 16.5, that, manually, its, beacon,\n",
      "Nearest to he: mr, she, '', but, westerns, ms, cartoon-like, movielink,\n",
      "Nearest to not: n't, if, they, let, but, that, afraid, would,\n",
      "Nearest to it: that, ato, temptation, the, there, medicine, ticked, a,\n",
      "Nearest to ,: ., and, the, -, ``, in, bullfrog, at,\n",
      "Nearest to from: in, as, and, after, on, at, with, excite,\n",
      "Average loss at step 82000: 3.095547\n",
      "Average loss at step 84000: 3.104051\n",
      "Average loss at step 86000: 3.040098\n",
      "Average loss at step 88000: 3.068807\n",
      "Average loss at step 90000: 3.007132\n",
      "Nearest to .: ,, and, that, to, the, :, of, brookside,\n",
      "Nearest to i: we, he, you, it, n't, daly, them, if,\n",
      "Nearest to which: belle, emmerson, museums, julia, by, organised, screenshots, solved,\n",
      "Nearest to were: are, was, have, had, arbitrator, accompaniment, bromby, rose,\n",
      "Nearest to we: i, you, they, n't, sit, it, enhancements, quotas,\n",
      "Nearest to they: we, not, you, he, their, retrieve, 43.9bn, people,\n",
      "Nearest to would: will, should, can, could, did, may, does, if,\n",
      "Nearest to that: but, not, ., it, there, ``, :, ,,\n",
      "Nearest to had: have, has, coordinate, were, persist, would, malian, thought,\n",
      "Nearest to said: added, says, told, however, explained, ``, spokesman, travis,\n",
      "Nearest to this: it, last, year, cormac, agile, see, do, rhetoric,\n",
      "Nearest to he: she, mr, it, i, '', they, have, deeds,\n",
      "Nearest to not: n't, they, that, 30-month, if, but, promptly, delighted,\n",
      "Nearest to it: he, this, i, but, that, them, she, we,\n",
      "Nearest to ,: ., and, ``, UNK, has, that, -, malfunction,\n",
      "Nearest to from: 3220, over, and, after, at, gavin, in, curiously,\n",
      "Average loss at step 92000: 3.095858\n",
      "Average loss at step 94000: 3.086983\n",
      "Average loss at step 96000: 3.035480\n",
      "Average loss at step 98000: 2.943447\n",
      "Average loss at step 100000: 3.065369\n",
      "Nearest to .: ,, the, and, that, of, to, affiliates, but,\n",
      "Nearest to i: we, you, jupiter, they, 'm, balls, 2.9mbps, daly,\n",
      "Nearest to which: and, a, that, also, by, spaces, who, the,\n",
      "Nearest to were: are, was, omni, bethan, over-50, thirds, catalina, 2.5m,\n",
      "Nearest to we: i, they, you, wiggle, she, ideally, drill, weights,\n",
      "Nearest to they: we, you, their, november/early, phenomenon, untapped, i, people,\n",
      "Nearest to would: could, will, can, should, did, to, is, must,\n",
      "Nearest to that: it, but, what, also, ., the, to, which,\n",
      "Nearest to had: has, have, route, subjected, logic, been, kudrow, would,\n",
      "Nearest to said: added, says, told, '', memorable, affordable, occasionally, demonising,\n",
      "Nearest to this: the, last, a, gift, sub-eight, next, gatekeepers, terrible,\n",
      "Nearest to he: mr, she, it, '', commenee, cs2, westerns, postcards,\n",
      "Nearest to not: n't, if, only, claire, pre-school, pleased, ported, can,\n",
      "Nearest to it: that, ato, he, to, a, adequate, the, relax,\n",
      "Nearest to ,: ., the, and, -, ``, of, in, 104.76,\n",
      "Nearest to from: over, to, infirm, fleet, amibition, scandinavia, 4/6, trends,\n",
      "Testing Phase (Compute document embeddings)\n",
      "\tCalculating mean embedding for document  tech-34  with  100  steps.\n",
      "\tCalculating mean embedding for document  sport-166  with  100  steps.\n",
      "\tCalculating mean embedding for document  sport-87  with  100  steps.\n",
      "\tCalculating mean embedding for document  entertainment-119  with  100  steps.\n",
      "\tCalculating mean embedding for document  business-161  with  100  steps.\n",
      "\tCalculating mean embedding for document  sport-129  with  100  steps.\n",
      "\tCalculating mean embedding for document  tech-145  with  100  steps.\n",
      "\tCalculating mean embedding for document  business-135  with  100  steps.\n",
      "\tCalculating mean embedding for document  sport-206  with  100  steps.\n",
      "\tCalculating mean embedding for document  tech-216  with  100  steps.\n",
      "\tCalculating mean embedding for document  entertainment-216  with  100  steps.\n",
      "\tCalculating mean embedding for document  politics-184  with  100  steps.\n",
      "\tCalculating mean embedding for document  sport-184  with  100  steps.\n",
      "\tCalculating mean embedding for document  sport-45  with  100  steps.\n",
      "\tCalculating mean embedding for document  sport-32  with  100  steps.\n",
      "\tCalculating mean embedding for document  politics-247  with  100  steps.\n",
      "\tCalculating mean embedding for document  business-240  with  100  steps.\n",
      "\tCalculating mean embedding for document  entertainment-98  with  100  steps.\n",
      "\tCalculating mean embedding for document  politics-171  with  100  steps.\n",
      "\tCalculating mean embedding for document  politics-8  with  100  steps.\n",
      "\tCalculating mean embedding for document  business-165  with  100  steps.\n",
      "\tCalculating mean embedding for document  politics-16  with  100  steps.\n",
      "\tCalculating mean embedding for document  business-44  with  100  steps.\n",
      "\tCalculating mean embedding for document  business-215  with  100  steps.\n",
      "\tCalculating mean embedding for document  tech-79  with  100  steps.\n",
      "\tCalculating mean embedding for document  tech-178  with  100  steps.\n",
      "\tCalculating mean embedding for document  entertainment-163  with  100  steps.\n",
      "\tCalculating mean embedding for document  entertainment-196  with  100  steps.\n",
      "\tCalculating mean embedding for document  politics-236  with  100  steps.\n",
      "\tCalculating mean embedding for document  entertainment-1  with  100  steps.\n",
      "\tCalculating mean embedding for document  sport-20  with  100  steps.\n",
      "\tCalculating mean embedding for document  tech-157  with  100  steps.\n",
      "\tCalculating mean embedding for document  sport-26  with  100  steps.\n",
      "\tCalculating mean embedding for document  politics-78  with  100  steps.\n",
      "\tCalculating mean embedding for document  tech-238  with  100  steps.\n",
      "\tCalculating mean embedding for document  sport-231  with  100  steps.\n",
      "\tCalculating mean embedding for document  tech-42  with  100  steps.\n",
      "\tCalculating mean embedding for document  politics-197  with  100  steps.\n",
      "\tCalculating mean embedding for document  business-171  with  100  steps.\n",
      "\tCalculating mean embedding for document  politics-98  with  100  steps.\n",
      "\tCalculating mean embedding for document  business-141  with  100  steps.\n",
      "\tCalculating mean embedding for document  entertainment-74  with  100  steps.\n",
      "\tCalculating mean embedding for document  entertainment-244  with  100  steps.\n",
      "\tCalculating mean embedding for document  tech-212  with  100  steps.\n",
      "\tCalculating mean embedding for document  entertainment-154  with  100  steps.\n",
      "\tCalculating mean embedding for document  business-144  with  100  steps.\n",
      "\tCalculating mean embedding for document  business-107  with  100  steps.\n"
     ]
    }
   ],
   "source": [
    "num_steps = 100001\n",
    "cbow_loss = []\n",
    "\n",
    "config=tf.ConfigProto(allow_soft_placement=True)\n",
    "# This is an important setting and with limited GPU memory,\n",
    "# not using this option might lead to the following error.\n",
    "# InternalError (see above for traceback): Blas GEMM launch failed : ...\n",
    "config.gpu_options.allow_growth = True\n",
    "\n",
    "with tf.Session(config=config) as session:\n",
    "    \n",
    "    # Initialize the variables in the graph\n",
    "    tf.global_variables_initializer().run()\n",
    "    print('Initialized')\n",
    "    \n",
    "    average_loss = 0\n",
    "    \n",
    "    # Train the Word2vec model for num_step iterations\n",
    "    for step in range(num_steps):\n",
    "        \n",
    "        # Generate a single batch of data\n",
    "        batch_data, batch_labels = generate_batch(data, batch_size, window_size)\n",
    "        \n",
    "        # Populate the feed_dict and run the optimizer (minimize loss)\n",
    "        # and compute the loss\n",
    "        feed_dict = {train_dataset : batch_data, train_labels : batch_labels}\n",
    "        _, l = session.run([optimizer, loss], feed_dict=feed_dict)\n",
    "        \n",
    "        # Update the average loss variable\n",
    "        average_loss += l\n",
    "        \n",
    "        if (step+1) % 2000 == 0:\n",
    "            if step > 0:\n",
    "                average_loss = average_loss / 2000\n",
    "                # The average loss is an estimate of the loss over the last 2000 batches.\n",
    "            print('Average loss at step %d: %f' % (step+1, average_loss))\n",
    "            cbow_loss.append(average_loss)\n",
    "            average_loss = 0\n",
    "        \n",
    "        # Evaluating validation set word similarities\n",
    "        if (step+1) % 10000 == 0:\n",
    "            sim = similarity.eval()\n",
    "            # Here we compute the top_k closest words for a given validation word\n",
    "            # in terms of the cosine distance\n",
    "            # We do this for all the words in the validation set\n",
    "            # Note: This is an expensive step\n",
    "            for i in range(valid_size):\n",
    "                valid_word = reverse_dictionary[valid_examples[i]]\n",
    "                top_k = 8 # number of nearest neighbors\n",
    "                nearest = (-sim[i, :]).argsort()[1:top_k+1]\n",
    "                log = 'Nearest to %s:' % valid_word\n",
    "                for k in range(top_k):\n",
    "                    close_word = reverse_dictionary[nearest[k]]\n",
    "                    log = '%s %s,' % (log, close_word)\n",
    "                print(log)\n",
    "    \n",
    "    # Computing test documents embeddings by averaging word embeddings\n",
    "    \n",
    "    # We take batch_size*num_test_steps words from each document\n",
    "    # to compute document embeddings\n",
    "    num_test_steps = 100\n",
    "    \n",
    "    # Store document embeddings\n",
    "    # {document_id:embedding} format\n",
    "    document_embeddings = {}\n",
    "    print('Testing Phase (Compute document embeddings)')\n",
    "    \n",
    "    # For each test document compute document embeddings\n",
    "    for k,v in test_data.items():\n",
    "        print('\\tCalculating mean embedding for document ',k,' with ', num_test_steps, ' steps.')\n",
    "        test_data_index = 0\n",
    "        topic_mean_batch_embeddings = np.empty((num_test_steps,embedding_size),dtype=np.float32)\n",
    "        \n",
    "        # keep averaging mean word embeddings obtained for each step\n",
    "        for test_step in range(num_test_steps):\n",
    "            test_batch_labels = generate_test_batch(test_data[k],batch_size)\n",
    "            batch_mean = session.run(mean_batch_embedding,feed_dict={test_labels:test_batch_labels})\n",
    "            topic_mean_batch_embeddings[test_step,:] = batch_mean\n",
    "        document_embeddings[k] = np.mean(topic_mean_batch_embeddings,axis=0)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualizing documents with t-SNE"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Defining a t-SNE and fitting data\n",
    "Here we define a t-SNE with its parameters and fit the learned embeddings to visualize them on a two dimensional surface."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting embeddings to T-SNE\n",
      "\tDone\n"
     ]
    }
   ],
   "source": [
    "# Number of data points to visualize\n",
    "num_points = 1000 \n",
    "\n",
    "# Create a t-SNE object\n",
    "tsne = TSNE(perplexity=30, n_components=2, init='pca', n_iter=5000)\n",
    "\n",
    "print('Fitting embeddings to T-SNE')\n",
    "# get the T-SNE manifold\n",
    "doc_ids, doc_embeddings = zip(*document_embeddings.items())\n",
    "two_d_embeddings = tsne.fit_transform(doc_embeddings)\n",
    "print('\\tDone')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plotting the t-SNE results\n",
    "After fitting the embeddings to the t-SNE, we can visualize the results with Matplotlib library."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\ntfFxcSE9DkJEREREROSCdy6DvF2ebpju6253/g7gNz7pLnLniYiIiIiIyFk6l0HeCuB29+/bgX/6\nzB/ijrJ5DXDQp1uniIiIiIiInIWKxVGIMeYfQCIQa4zZDkwCngAWG2OGAT8At7rJ04DewDbgGHBH\ncdRBREREREREiinIs9YOzGdRtwBpLXBPcaxXREREREREciuRgVdERERERESkZCjIExERERERKUcU\n5ImIiIiIiJQjCvJERERERETKEQV5IiIiIiIi5YiCPBERERERkXJEQZ6IiIiIiEg5oiBPRERERESk\nHFGQJyIiIiIiUo4oyBMRERERESlHFOSJiIiIiIiUIwryRM4D6enppKSkkJ2dXexlL1++nGeeeabI\n+RcsWIAxhszMzOKrVClJSUnh3//+d0hpDx06xKOPPkrHjh2JiYmhVq1adOzYkeXLl+dJm5GRwdCh\nQ7nsssuoWLEijRo1Clp2WloaXbp0ITIykho1ahAfHx9yvUREREQU5ImcB9LT05k8eXKZDPJuuOEG\n1q9fT7169YqxVqVj8uTJIQdTP/74I7NmzSIhIYHXXnuN1NRUmjdvTv/+/XnxxRdzpX3//fdZt24d\nl156KS1btgxa7pw5c+jXrx9XXnkly5YtY8mSJdxyyy0cO3asyNslIiIiF5aKpV0BESkdJ0+eJDw8\n/KzLiYuLIy4urhhqdH5p3Lgx3333HdWqVfPO69mzJz/99BPTp0/nnnvu8c6fMGECkyZNAiA5OZmM\njIyAZWZmZjJ69GieeuopRo8enatcERERkVCpJU/kHPrss8/4/e9/T1RUFFWrVuXaa69l3bp13uVD\nhw7loosuYtOmTXTu3Jlq1arRrFkz/va3v3nTpKSkMHnyZAAqVaqEMQZjjHf5sWPHGD9+PI0bN6Zy\n5co0btyYqVOn5mr1S09PxxjDW2+9xfDhw4mLi6NOnToMHTqUhQsXsmPHDm+5nq6EJ06c4P777+ey\nyy4jMjKSunXr0rdvX77++utc2xiou2ajRo1ITk7mjTfeoGXLlkRERBAfH58nuPFs/8aNG+nYsSNV\nq1blkksu4e233wbgmWeeoVGjRtSoUYN+/frx66+/5sqflZXFtGnTaNGiBeHh4dSvX5+xY8dy4sQJ\nb5rMzEyMMcyZM4eJEydSr149atWqRd++fdm+fbs3nWefTp061bsvUlJS8v1sIyIicgV4HvHx8ezc\nuTPXvLCw0E61L7/8MmFhYfzhD38IKb2IiIhIIAryRM6R//znP3Ts2JF9+/Yxd+5cli5dSkxMDN27\nd+fTTz/1pjt06BCDBg0iOTmZf/7zn7Rv354//vGPrF27FoC77rqLYcOGAc69XevXr2f9+vWAE+T0\n7NmTefPmMWrUKP71r39x1113MWXKFMaNG5enTvfddx/WWl599VUWLFjAhAkT6N27N3Fxcd5yly1b\nBjgtfYcPH+aRRx7h7bffZvbs2Zw4cYIOHTrwyy+/FLj969atY8aMGUyZMoXU1FTOnDlDnz59OHDg\nQK50hw4dYsiQIdx1110sW7aM2rVrc/PNNzN27FjWrl3Liy++yMyZM1m7dm2u1jFwWsUee+wxBg0a\nxNtvv82DDz7I3//+dwYPHpynPtOmTWPbtm28/PLLPPfcc6xfv57k5GTvcs8+HTp0qHdf3HXXXQVu\np78PP/yQFi1aFDofOJ9vixYteOONN2jSpAkVK1akadOmebp/ioiIiARlrS3z05VXXmlFzjfXXXed\nbdGihT158qR3XlZWlm3RooXt16+ftdba22+/3QL23//+tzfNiRMnbHR0tB0+fLh33qRJkyxgT58+\nnWsdr7zyigXsBx98kGv+Y489ZitVqmR37dplrbV27dq1FrA33nhjnnrefvvttkGDBgVuT1ZWlj16\n9KiNjIy0zzzzjHf+/PnzLWC///5777yGDRvaWrVq2X379nnnbdiwwQJ20aJFudbtX//PPvvMArZ5\n8+Y2KyvLO//++++3FStW9M778MMPLWAXLlyYq56vvfaaBeymTZustdZ+//33FrAJCQm50j311FMW\nsDt27PDOA+zDDz9c4L7Iz5w5cyxgX3vttXzTDB482DZs2DDgsksuucRWr17dxsbG2pdeesm+//77\n9g9/+IMF7MyZM4tcLxERETn/ARttiPGTWvJEzoHjx4/zwQcfcMsttxAWFkZWVhZZWVlYa+nevTsf\nfvihN221atXo2rWr9314eDjNmzfnxx9/LHA9q1evpmHDhnTs2NG7jqysLHr06MHp06f56KOPcqXv\n379/obZj8eLFXH311dSqVYuKFSsSERHBkSNH2Lp1a4F5O3ToQFRUlPd969atAfJsV0REBF26dPG+\n97SCde/enQoVKuSan5WVxc8//+zd9sqVKzNgwIA82w7k2scAvXv3zvU+v/r4s9bmKv/MmTMB06Wn\n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\nYOVhjGHEiBGMGDGC/fv388477zB27FiSkpL4+OOPz6p+MTExVKlShXXr1gVcXr9+fQAqVarE+PHj\nGT9+PL/88gurVq1izJgxHDt2jNTUVAAGDBjAgAEDOHLkCOnp6YwfP55evXqxfft2+vbty4YNG7zl\neoLNwrj00kvZtGlTwGX+A9WIiIiIiBREQZ4UyeLFi7335AG88cYbREZG0rp1aypUqADAF198QfPm\nzQFnFMtgQ/5HRUV5g7tQRq4sSK9evZg+fToHDx6kW7duIeWpW7cud911F2lpaQG7nUZGRtKnTx++\n++47Ro0axd69e4mLiyMmJiZAaaHr378/77//Phs3biQ+Ph5wunC+++67tG/f/qzKFhEREZELj4I8\nKZK5c+eSnZ1N+/btWbNmDfPmzSMlJYWaNWvSvn17mjRpwrhx48jOziY8PJxZs2Zx8uTJXGXcfffd\nVK9enQ4dOlC7dm2++eYbXn311WIZ2CQxMZGBAwcyYMAAxowZw1VXXUVYWBiZmZmkpaUxffp0mjdv\nTr9+/bj88stp164dUVFRbNq0idWrVzNixAgAJk6cyK5du+jatSv169dn+/btPP/887Rt25a4uLig\ndfjhhx+8rXx79+4lLCyMN998E3Du9WvYsCEAw4YN48UXX+Tmm2/mscceIzY2lpdeeomtW7fmCYw9\n+T/99FMA/vWvfxEXF0dcXBwJCQlnvd9EREREpByw1pb56corr7RSNkyaNMkC9vPPP7eJiYm2SpUq\ntk6dOvaRRx6xZ86c8ab74osvbEJCgo2IiLC/+c1v7IwZM7x5PRYsWGATEhJsXFycrVy5sm3UqJEd\nPXq0PXjwoDdNQkKCTUhI8L5fu3atBey7776bq17z58+3gP3++++9886cOWNnzpxp27RpY8PDw22N\nGjVsmzZt7Lhx4+yBAwestdY+/fTT9uqrr7bR0dG2SpUqtnnz5nbSpEn21KlT1lprV61aZXv06GHr\n1q1rK1eubC+66CJ755132h07dhS4rzx1CjTNnz8/V9qdO3fawYMH26ioKBseHm6vueYau2bNmjxl\n5lee7z6Skuc5tk+fPl0i6/P/vzifrFixwg4cONA2a9bMGmMK3I6FCxfa+Ph4W7VqVVuzZk177bXX\n2i1btniXe84J/lPNmjXP8ZaIiIiULGCjDTF+Mk76si0+Pt5u3LixtKshIhJQSkoKkydP5vTp01Ss\n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\nffp0Ro0aRVRUFEFBQQDs3bvXY5/i4mIOHDhAixYtAAgNDaWwsJDi4mKPQu+7775zby+vKpOc5Obm\neqzHxMS4fz5x4gR33303eXl5rFq1iri4uEod09/fn5/85Cd89NFHlc5DRERELh/15ImIXALGGK67\n7jr3s+q2bt3q3rZgwQKP2IULF+JyuejatStQ+vgCl8vFwoULPeLefvtt/P393XHnEhAQwNGjRyu0\nO51Oj6VBgwZA6UQqw4YNY/Xq1WRlZVXpXr4ff/yRvLw8rrnmmkrvIyIiIpePevJERC7QJ598wsMP\nP8zgwYNp06YNJ0+eZPbs2fj6+pKQkMDhw4cB+PTTTxk+fDhDhgxhx44dTJo0ifj4ePfz5/r06cPN\nN9/MyJEjKSgoIDY2luzsbGbOnElaWprHpCtn07FjRwoLC8nIyMDpdBIYGHjOnrnRo0ezcOFCJk2a\nRHBwMBs3bnRva9mypXvY5i9/+UtCQ0NxOp2EhYXx5ZdfMn36dL799lvmzZvnccz33nuPI0eOsGXL\nFqB0ts59+/YRHBxMnz59qvbiXkFycnLIycnhySefxMfn0n73mpWVxeeff8748eMvaP/Zs2czfPhw\nvvjii/M+lqO2e/rpp+nWrZv7GZDns2zZMubPn09eXh67du2iW7du5OTkVIjbunUrr732Gnl5eWzZ\nsoUTJ06c8d5XgI8++ogJEyawfv16fHx8iI+PJz09nTZt2lzMpYmIVGStrfVLp06drIhIbbN37157\n33332bZt29qgoCDrcDhst27d7IoVK6y11q5Zs8YCNjMz06akpNiGDRva+vXr26FDh9qCggKPYx08\neNCOHj3aRkREWD8/P9u2bVubnp5uXS6XO6bseKtWraqQS1FRkR0yZIht1KiRBWxkZOQ5c4+MjLTA\nGZennnrKHffGG2/Yrl272tDQUBsQEGCjo6Pt0KFD7SeffFLpY54vlyvdU089ZQF74sSJS37slJQU\n26JFiwve//vvv7cbNmywx44du4RZ1QzATpo0qdLx999/v+3QoYO999577dVXX227d+9+xrjZs2fb\nli1b2jvvvNN27drVlv5pVdGOHTts/fr1bZcuXWxWVpZdtGiRjYuLs82aNbN79+69kEsSkSsMkGcr\nWT+pJ09E5AI1adKEOXPmnDcuJCSE2bNnnzdm+vTpTJ8+/awx8fHxZ+0hCA4OZv78+efNpczu3bsr\nFXf//fdz//33Vyq2cHfhGdu/5EsMhgY04BCHKpuiXITjx49f0LMSTxceHk54ePglyKjumTFjhrtn\n9eabbz5r3L333ktKSgoAjz/+eIXZcMs8//zz1KtXj/fee49GjRoBcOONN9KmTRteeuklXnjhhUt8\nBSJyJdM9eSIickkc5vBFba9rPv74Y/r374/D4SAoKIif/exn/P3vf3dvT01NpWXLlnz44Yfccsst\nXHXVVbRt25Y//elP7pinn36a3/3ud0DpTKjGGI+JdX788Ucee+wxWrdujb+/P61bt+bZZ5/F5XK5\nY3JycjDGsHjxYkaMGEF4eDhNmzYlNTWVOXPmkJ+f7z5u2ZDLY8eO8etf/5prr72W+vXrExERQb9+\n/fjPf/7jcY2zZ8/GGOPxpUBUVBTJycm88847dOjQgeDgYJxOJ+vXr/fYt+z68/LyuOmmmwgKCiIm\nJobly5cDkJ6eTlRUFCEhIQwYMICCggKP/UtKSnjuuedo3749AQEBNG/enEceeYRjx465Y3bv3o0x\nhj//+c88+eSTNGvWjEaNGtGvXz/27Nnjjit7TZ999ln3a/H000+f8/2t7NDZysZt3LiRrl27ugs8\nKB0afe211/Luu+9W6hgiIpWlnjwREZEq2rx5M7fccgv/93//x4wZM7jqqqv405/+RGJiIv/85z/p\n1KkTAIcOHeKee+5h3LhxPPnkk8yaNYuHHnqImJgYevTowQMPPMCePXt44403WL9+PfXq1XOfo6Sk\nhNtuu41t27bxxBNPEBcXx8aNG3nmmWcoLCxk2rRpHjmNHTuWPn36MG/ePI4dO0ZcXBwFBQXk5uay\ndOlSAHfv3vHjxzl8+DCPP/44zZo1o7CwkD/+8Y907dqV7du3ux/fcTZ///vf+e9//8szzzxDYGAg\nTzzxBHfccQe7d+/2KGIOHTrEfffdx29+8xuaN2/Os88+y1133cXo0aPZsWMHf/jDH9i7dy/jxo1j\n9OjRHpMUJScns2zZMh577DFuuukmtm/fzhNPPMHu3bvJzMz0yOe5557jpptu4s033+T777/nkUce\nITk52X0P3YYNG+jatSupqan88pe/BDjr40KqS7169So8JgVK35PPPvuMY8eOERgYeFlzEhEvVtlx\nnTW56J48EZHaj0r8z1skJCTY9u3b2+PHj7vbSkpKbPv27e2AAQOstaX3wwF29erV7phjx47Z0NBQ\n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\nn7z11ls4HA53+z333ENYWBgpKSls2bKFffv2MWXKFNatWwdUfnioeD/9lyAiIiIitZYxhlWrVuF0\nOklLS6Ndu3ZER0eTkZHhEde0aVOPdX9/fxwOh/s+tcLCQkJDQ/H39/eIi4iIcG8vr1mzZpXO0c/P\nz2NZu3Ztpfc93YQJE3j99dd588036dWrl8e2Ro0asXjxYvbt28dPfvITwsPDefPNN3n66aernLN4\nNw3XFBEREZFaLTo6mrlz52Kt5eOPP2b69OmMGjWKqKgogoKCANyzWJYpLi7mwIED7nvUQkNDKSws\npLi42KPQ++6779zbyzPGVDq/3Nxcj/WYmJjKX1w5zz77LM8//zyvvfYa99577xljbrnlFj777DN2\n7drFyZMnadeuHS+++CJBQUF06tTpgs4r3kc9eSIiIiJSJxhjuO6669zPqtu6dat724IFCzxiFy5c\niMvlomvXrgB0794dl8vFwoULPeLefvtt/P393XHnEhAQwNGjRyu0O51Oj6VBgwZVvrZXX32Vxx9/\nnGeffZYxY8acM9YYQ9u2bWnfvj0//vgjM2bM4N577yU4OLjK5xXvpJ48EREREam1PvnkEx5++GEG\nDx5MmzZtOHnyJLNnz8bX15eEhAQOHz4MwKeffsrw4cMZMmQIO3bsYNKkScTHx9OzZ08A+vTpw803\n38zIkSMpKCggNjaW7OxsZs6cSVpamsekK2fTsWNHCgsLycjIwOl0EhgYSFxc3Dn3WbRoEQCbNm0C\n4L333iM8PJzw8HC6d+8OlD4Mfdy4cfTu3ZuEhAQ2btzo3j8kJISOHTu619PS0ujUqRNhYWHs2rWL\nF198ET8/P5577rkqvKri7VTkiYiIiEitFRERQatWrUhPT2fPnj3uwuqvf/0rnTp1IicnB4BXXnmF\npUuXMnjwYE6ePEm/fv149dVX3cfx8fFh+fLlTJw4keeff579+/cTFRVFeno648aNq1QuDzzwABs3\nbmTixIn88MMPREZGsnv37nPuk5SU5LE+atQooLRnsSz3FStWYK1lxYoVrFixwiO+fByUDksdN24c\n33//PU2aNGHgwIH87ne/qzDcVK5s5mJn/7kcnE6nzcvLq+k0RERERKSWycnJoUePHqxatYrExMSa\nTqfahRDCYQ6fdXsDGnCIQ5cxI7lcjDGbrLXOysTqnjwRERERkTriXAVeZbbLlUFFnoiIiIiIiBfR\nPXkiIiIiUmfFx8df9MPHRbyNevJERERERES8iIo8ERERERERL6IiT0RERERExIuoyBMREREREfEi\nKvJEREREROqIBjS4qO1yZdDsmiIiIiIidYQedC6VoZ48ERERERERL6IiT0RERERExIuoyBMRERER\nEfEiKvJERERERES8iIo8ERERERERL6IiT0RERERExIuoyBMREREREfEiKvJERERERES8iIo8ERER\nERERL6IiT0RERERExIuoyBMREREREfEiKvJERERERES8iIo8ERERERERL6IiT0RERERExIv4VsdB\njTH/HxBzarUR8IO19jpjTBSwHfjvqW0brbUjqyMHERERERGRK1G1FHnW2sFlPxtjpgEHy23+zFp7\nXXWcV0RERERE5EpXLUVeGWOMAQYBCdV5HhERERERESlV3ffk3QLstdbuLNfW2hjzoTFmrTHmlrPt\naIx50BiTZ4zJKygoqOY0RUREREREvMMF9+QZY94HIs6waZK1dsmpn4cC88tt+xZoZa3db4zpBGQZ\nY2KttYdOP4i19nXgdQCn02kvNE8REREREZEryQUXedbaxHNtN8b4Aj8HOpXb5zhw/NTPm4wxnwHt\ngLwLzUNERERERET+pzqHayYC/7HW7ilrMMaEG2Pqnfo5GmgLfF6NOYiIiIiIiFxRqnPilSF4DtUE\n6AZMNsacAFzASGttYTXmICIiIiIickWptiLPWpt6hrZMILO6zikiIiIiInKlq+7ZNUVEREREROQy\nUpEnIiJSw7KyskhPT690/KJFi7jrrruIjIwkKCiImJgY0tLSOHz4cIXYAwcO8MADDxAWFkZwcDCJ\niYls2bLlUqYvIiK1jIo8ERGRGlbVIu+ll16iXr16TJkyhRUrVvDQQw+RkZHBrbfeisvlcsdZa+nX\nrx8rVqzgtddeIzMzkxMnTtCjRw/27NlzjjOIiEhdVp0Tr4iIiMg5HD9+nICAgCrvt2zZMsLDw93r\n3bt3JzQ0lJSUFHJyckhISABg6dKl/OMf/2D16tX06NEDgK5du9K6dWteeOEFXn311UtzISIiUquo\nJ09ERK5YO3bsYODAgTRp0oTAwEBatWpFUlISJSUl5OTkYIwhMzOT1NRUHA4HISEhDBs2jP3793sc\n59ChQ4wZM4bmzZsTEBBATEwML7/8MtZad0zZ8RYvXsyIESMIDw+nadOmpKamMmfOHPLz8zHGYIwh\nKirqnHmXL/DK3HDDDQDk5+e725YuXUrz5s3dBR5Aw4YN6devH0uWLLmQl0xEROoA9eSJiMgVq2/f\nvjgcDjIyMggLCyM/P5/s7GyPIY/jxo0jMTGR+fPns3PnTiZOnMg333zDmjVrAHC5XPTt25fNmzcz\nefJk4uLiWL58OePHj6egoIApU6Z4nHPs2LH06dOHefPmcezYMeLi4igoKCA3N5elS5cCXFDv3tq1\nawHo0KGDu+3TTz/l2muvrRAbGxvL3LlzKSoqon79+lU+l4iI1G4q8kRE5Iq0b98+du3axZIlS+jf\nv7+7/Z577vGIi42NZdasWQD07t2b0NBQkpOT+eCDD+jZsyfZ2dmsX7+eWbNmkZqaCkCvXr04cuQI\n06ZNY/z48YSFhbmP17lzZ2bOnOlxjvDwcPz9/enSpcsFXUt+fj5PPvkkiYmJOJ1Od3thYeEZewVD\nQ0OB0klZVOSJiHgfDdcUEZErUuPGjYmOjmbChAnMmDGDnTt3njFu0KBBHutJSUn4+PiwYcMGANat\nW4ePj0+F4jA5OZni4mJ3XJmBAwdWOseSkhKPpfzwzzJFRUUMGDAAX19fdzEqIiJXNhV5IiJyRTLG\nsGrVKpxOJ2lpabRr147o6GgyMjI84po2beqx7u/vj8PhcN/7VlhYSGhoKP7+/h5xERER7u3lNWvW\nrNI5+vn5eSxlQzLLHD16lH79+vH555+zcuVKWrZs6bHd4XBw4MCBCscty8nhcFQ6FxERqTs0XFNE\nRK5Y0dHRzJ07F2stH3/8MdOnT2fUqFFERUURFBQEwN69ez32KS4u5sCBA7Ro0QIoHfpYWFhIcXGx\nR6H33XffubeXZ4ypdH65ubke6zExMe6fT5w4wd13301eXh6rVq0iLi6uwv6xsbH87W9/q9C+bds2\nWrVqpaGaIiJeSj15IiJyxTPGcN1117mfVbd161b3tgULFnjELly4EJfLRdeuXYHSxxe4XC4WLlzo\nEff222/j7+/vjjuXgIAAjh49WqHd6XR6LA0aNABKJ3sZNmwYq1evJisr66z38vXv35/8/HyPHsBD\nhw6xbNkyj/sQRUTEu6gnT0RErkiffPIJDz/8MIMHD6ZNmzacPHmS2bNn4+vrS0JCAocPHwZKZ6gc\nPnw4Q4YMYceOHUyaNIn4+Hh69uwJQJ8+fbj55psZOXIkBQUFxMbGkp2dzcyZM0lLS/OYdOVsOnbs\nSGFhIRkZGTidTgIDA8/YM1dm9OjRLFy4kEmTJhEcHMzGjRvd21q2bOkettm/f3+6du1KcnIyL774\nIg6Hg+eeew5rLY8++ujFvHwiIlKbWWtr/dKpUycrIiJyKe3du9fed999tm3btjYoKMg6HA7brVs3\nu2LFCmuttWvWrLGAzczMtCkpKbZhw4a2fv36dujQobagoMDjWAcPHrSjR4+2ERER1s/Pz7Zt29am\np6dbl8vljik73qpVqyrkUlRUZIcMGWIbNWpkARsZGXnO3CMjIy1wxuWpp57yiN2/f78dPny4dTgc\nNigoyCYkJNiPPvrowl40ERGpMUCerWT9ZOwZZuqqbZxOp83Ly6vpNERE5AqSk5NDjx49WLVqFYmJ\niTWdzgULIYTDHD7r9gY04BCHLmNGIiJyIYwxm6y1zvNH6p48ERERr3auAq8y20VEpO5RkSciIiIi\nIuJFNPGKiIjIGcTHx5/x4eMiIiK1nXryREREREREvIiKPBERERERES+iIk9ERERERMSLqMgTERER\nERHxIiryREREvFgDGlzUdhERqXs0u6aIiIgX04PORUSuPOrJExERERER8SIq8kRERERERLyIijwR\nEREREREvoiJPRERERETEi6jIExERERER8SIq8kRERERERLyIijwREREREREvoiJPRERERETEi6jI\nExERERER8SIq8kRERERERLyIijwREREREREvoiJPRERERETEi6jIExERERER8SIq8kRERERERLyI\nijwREREREREvoiJPRERERETEi6jIExERERER8SIq8kRERERERLyIijwREREREREvoiJPRERERETE\ni6jIExERERER8SIq8kRERERERLyIijwREREREREvoiJPRERERETEi6jIExERkTonKyuL9PT0Ssev\nXLmShIQEIiIiCAgIoGXLlgwaNIht27Z5xC1atIi77rqLyMhIgoKCiImJIS0tjcOHD1/qSxARqTbG\nWlvTOZyX0+m0eXl5NZ2GiIiI1BKpqam8//777Nmzp1Lx8+fPZ/Pmzdx4442Eh4fz1VdfMXXqVL7+\n+mu2bNlCZGQkAF26dKFVq1YMGDCAli1b8uGHH/L000/Tvn17/vnPf+Ljo+/HRaRmGGM2WWudlYn1\nre5kRERERC6V48ePExAQUOX9hg4dytChQz3aOnfuTPv27Vm0aBGPPPIIAMuWLSM8PNwd0717d0JD\n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\ng85FxBtouKaIiIiIiIgXUZEnIiIiIiLiRVTkiYiIiIiIeBEVeSIiIiIiIl5ERZ6IiBc730yAmilQ\nRETE+2h2TRERL6aZAkVERK486skTERERERHxIiryREREREREvIiKPBERERERES+iIk9ERERERMSL\nqMgTERERERHxIiryREREREREvIiKPBERERERES+iIk9ERERERMSLqMgTERERERHxIiryRERERERE\nvIiKPBERERERES+iIk9ERERERMSLqMgTERERERHxIiryREREREREvIiKPBERERERES9yUUWeMSbJ\nGPOpMcZljHGeti3NGLPLGPNfY8xt5dp7n2rbZYyZcDHnFxEREREREU8X25O3Ffg5sK58ozGmIzAE\niAV6A380xtQzxtQD/gD0AToCQ0/FioiIiIiIyCXgezE7W2u3AxhjTt80AHjHWnsc+MIYswvofGrb\nLmvt56f2e+dU7LaLyUNERERERERKVdc9eS2Ar8ut7znVdrb2CowxDxpj8owxeQUFBdWUpoiIiIiI\niHc5b0+eMeZ9IOIMmyZZa5dc+pRKWWtfB14HcDqdtrrOIyIiIiIi4k3OW+RZaxMv4Lj5wNXl1lue\nauMc7SIiIiIiInKRqmu45lJgiDEmwBjTGmgL/BvIBdoaY1obY/wpnZxlaTXlICIiIiIicsW5qIlX\njDEDgdeAcGC5MeYja+1t1tpPjTELKJ1QpQQYba09eWqfMcBKoB7wprX204u6AhEREREREXEz1tb+\n292cTqfNy8ur6TRERERERERqhDFmk7XWef7I6huuKSIiIiIiIjVARZ6IiIiIiIgXUZEnIiIiIiLi\nRVTkiYiIiIiIeBEVeSIiIiIiIl5ERZ6IiIiIiIgXUZEnIiIiIiLiRVTkiYiIiIiIeBEVeSIiIiIi\nIl5ERZ6IiIiIiIgXMdbams7hvIwxBcCXNZ2HeAgD9tV0ElJlet/qLr13dZPet7pJ71vdpfeubtL7\nVjmR1trwygTWiSJPah9jTJ611lnTeUjV6H2ru/Te1U163+omvW91l967uknv26Wn4ZoiIiIiIiJe\nREWeiIiIiIiIF1GRJxfq9ZpOQC6I3re6S+9d3aT3rW7S+1Z36b2rm/S+XWK6J09ERERERMSLqCdP\nRERERETEi6jIExERERER8SIq8qRKjDFPG2PyjTEfnVpuL7ctzRizyxjzX2PMbTWZp3gyxrxojPmP\nMeYTY8y7xphGp9qjjDFHy72ff6rpXMWTMab3qc/ULmPMhJrOR87MGHO1MWaNMWabMeZTY8zDp9rP\n+jtTag9jzG5jzJZT71HeqbZQY8wqY8zOU//vqOk85X+MMTHlPlcfGWMOGWPG6TNXOxlj3jTGfG+M\n2Vqu7YyfMVPq1VP/7n1ijLm+5jKvu3RPnlSJMeZpoMha+9Jp7R2B+UBnoDnwPtDOWnvysicpFRhj\negGrrbUlxpjnAay1jxljooC/Wmuvrcn85MyMMfWAHcCtwB4gFxhqrd1Wo4lJBcaYZkAza+1mY0wD\nYBNwJzCIM/zOlNrFGLMbcFpr95VrewEotNZOPfUFi8Na+1hN5Shnd+p3ZT5wIzAcfeZqHWNMN6AI\nmFv2N8fZPmOnCvOxwO2UvqevWGtvrKnc6yr15MmlMgB4x1p73Fr7BbCL0oJPagFr7d+stSWnVjcC\nLWsyH6m0zsAua+3n1tpi4B1KP2tSy1hrv7XWbj7182FgO9CiZrOSizQAmHPq5zmUFu1SO/UEPrPW\nflnTiciZWWvXAYWnNZ/tMzaA0mLQWms3Ao1OfZEmVaAiTy7EmFPd52+WG77SAvi6XMwe9AdObXU/\n8F659dbGmA+NMWuNMbfUVFJyRvpc1UGnesj/D/jXqaYz/c6U2sUCfzPGbDLGPHiqram19ttTP38H\nNK2Z1KQShlA6mqiMPnN1w9k+Y/q37xJQkScVGGPeN8ZsPcMyAMgArgGuA74FptVosuJ2nvetLGYS\nUAK8farpW6CVtfb/gPHAX4wxIZc/exHvYIypD2QC46y1h9DvzLriZmvt9UAfYPSpoWVutvTeFt3f\nUgsZY/yB/sDCU036zNVB+oxder41nYDUPtbaxMrEGWNmAH89tZoPXF1uc8tTbXKZnO99M8akAncA\nPU/9MsVaexw4furnTcaYz4B2QF71ZiuVpM9VHWKM8aO0wHvbWrsYwFq7t9z28r8zpRax1uaf+v/v\njTHvUjpUeq8xppm19ttTQ8W+r9Ek5Wz6AJvLPmv6zNUpZ/uM6d++S0A9eVIlp42JHgiUzZK0FBhi\njAkwxrQG2gL/vtz5yZkZY3oDjwL9rbU/lmsPP3XDOsaYaErft89rJks5g1ygrTGm9alvq4dQ+lmT\nWsYYY4A3gO3W2vRy7Wf7nSm1hDEm+NRkORhjgoFelL5PS4GUU2Ep/38798sSURCFYfw5KPgBNBv8\nFAaD0S4IFkGLRrNlQdhuMFsEFyz+C34Ai91qUJvBsMUieAx3hEXuolu8Ojy/dicMU85l3uFwgItu\nTqhvrDPSqmnN/SvjauwS2ChTNheB4Uhbp37I6ZqaSEQc07RAJPAAbH8WXmkF3KJpB9zNzOtx++h3\nRcQ9MAO8lKXbzNyJiFVgH3gD3oFeZl51dEy1KFPGDoAp4Cgz+x0fSS0iYgm4Ae5oaglgj+YC2vrP\n1N9QHrjOyuc0cJKZ/YiYBU6BeeARWMvMr4Mj1KESyp+AhcwclrWx9xR1JyIGwDIwBzwDPeCclhor\nj2aHwArwCmxmph1GEzLkSZIkSVJFbNeUJEmSpIoY8iRJkiSpIoY8SZIkSaqIIU+SJEmSKmLIkyRJ\nkqSKGPIkSZIkqSKGPEmSJEmqyAdFZDoZQj1NngAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x205c7644ac8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot(embeddings, labels):\n",
    "  \n",
    "  n_clusters = 5 # number of clusters\n",
    "    \n",
    "  # automatically build a discrete set of colors, each for cluster\n",
    "  label_colors = [pylab.cm.spectral(float(i) /n_clusters) for i in range(n_clusters)]\n",
    "  label_markers = ['o','^','d','s','x']\n",
    "  # make sure the number of document embeddings is same as\n",
    "  # point labels provided\n",
    "  assert embeddings.shape[0] >= len(labels), 'More labels than embeddings'\n",
    "  \n",
    "  pylab.figure(figsize=(15,15))  # in inches\n",
    "\n",
    "  def get_label_id_from_key(key):\n",
    "    '''\n",
    "    We assign each different category a cluster_id\n",
    "    This is assigned based on what is contained in the point label\n",
    "    Not the actual clustering results\n",
    "    '''\n",
    "    if 'business' in key:\n",
    "        return 0\n",
    "    elif 'entertainment' in key:\n",
    "        return 1\n",
    "    elif 'politics' in key:\n",
    "        return 2\n",
    "    elif 'sport' in key:\n",
    "        return 3\n",
    "    elif 'tech' in key:\n",
    "        return 4\n",
    "            \n",
    "  # Plot all the document embeddings and their corresponding words\n",
    "  for i, label in enumerate(labels):\n",
    "    x, y = embeddings[i,:]\n",
    "    pylab.scatter(x, y, c=label_colors[get_label_id_from_key(label)],s=50,\n",
    "                  marker=label_markers[get_label_id_from_key(label)])    \n",
    "    \n",
    "    # Annotate each point on the scatter plot\n",
    "    pylab.annotate(label, xy=(x, y), xytext=(5, 2), textcoords='offset points',\n",
    "                   ha='right', va='bottom',fontsize=16)\n",
    "  \n",
    "  # Set plot title\n",
    "  pylab.title('Document Embeddings visualized with t-SNE',fontsize=24)\n",
    "  \n",
    "  # Use for saving the figure if needed\n",
    "  pylab.savefig('document_embeddings.png')\n",
    "  pylab.show()\n",
    "\n",
    "# Run the plotting function\n",
    "plot(two_d_embeddings, doc_ids)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Perform Document Classification\n",
    "\n",
    "Here we first cluster the document embeddings by means of K-means. K-means is a popular and simple clustering algorithm. Then we will list what is contained in each cluster. Each cluster should roughly contain documents belonging to a single category. You can use the same information to classify an unseen document using the following steps.\n",
    "1. Compute the document embeddings for test document\n",
    "2. Compute K-means using all the previous documents + the new document\n",
    "3. Label the new test document to be of the category most of it's neighbors belong to"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Documents in Cluster  0\n",
      "\t ['entertainment-216', 'business-240', 'business-44', 'tech-178', 'business-165', 'tech-238', 'business-171', 'business-144', 'business-107']\n",
      "\n",
      "Documents in Cluster  1\n",
      "\t ['tech-34', 'tech-145', 'business-135', 'sport-206', 'tech-216', 'politics-184', 'politics-247', 'politics-171', 'politics-8', 'politics-78', 'entertainment-163', 'politics-16', 'business-141', 'business-215', 'tech-79', 'tech-157', 'sport-231', 'tech-42', 'politics-197', 'politics-98', 'tech-212']\n",
      "\n",
      "Documents in Cluster  2\n",
      "\t ['sport-166', 'entertainment-119', 'business-161', 'sport-129', 'sport-45', 'entertainment-98', 'entertainment-196', 'politics-236', 'sport-26', 'entertainment-1', 'entertainment-74', 'entertainment-244', 'entertainment-154']\n",
      "\n",
      "Documents in Cluster  3\n",
      "\t ['sport-184']\n",
      "\n",
      "Documents in Cluster  4\n",
      "\t ['sport-87', 'sport-32', 'sport-20']\n"
     ]
    }
   ],
   "source": [
    "# Create and fit K-means\n",
    "kmeans = KMeans(n_clusters=5, random_state=43643, max_iter=10000, n_init=100, algorithm='elkan')\n",
    "kmeans.fit(np.array(list(document_embeddings.values())))\n",
    "\n",
    "# Compute items fallen within each cluster\n",
    "document_classes = {}\n",
    "for inp, lbl in zip(list(document_embeddings.keys()), kmeans.labels_):\n",
    "    if lbl not in document_classes:\n",
    "        document_classes[lbl] = [inp]\n",
    "    else:\n",
    "        document_classes[lbl].append(inp)\n",
    "for k,v in document_classes.items():    \n",
    "    print('\\nDocuments in Cluster ',k)\n",
    "    print('\\t',v)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
